package com.apps.sworld.dao;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.apps.sworld.sWorld;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * 对mybits的IService重写,方便做继承
 * @param <T>
 */
public interface sDao<T> extends sWorld {

    /**
     * 获取当前对象的模型
     * @return
     */
    Class<T> currentModelClass();
    /**
     * 保存到数据库
     */
    T saveToDB(T t);


    /**
     * 按ID更新
     * @param t
     * @return
     */
    T updateById(T t);

    /**
     * 删除数据
     * @param wrapper
     */
    List<T> delete(QueryWrapper<T> wrapper);

    /**
     * 按条件进行数据查询
     * @param wrapper
     * @return
     */
    List<T> query(QueryWrapper<T> wrapper);

    /**
     * 按ID组查出数据
     * @param idList
     * @return
     */
    Collection<T> queryByIds(Collection<? extends Serializable> idList);
    /**
     * 查询一条数据
     * @param wrapper
     * @return
     */
     T getOne(QueryWrapper<T> wrapper);

    /**
     * 按条件分页查询
     * @param wrapper
     * @param pageNo
     * @param pageSize
     * @return
     */
    IPage<T> pageQuery(QueryWrapper<T> wrapper, int pageNo, int pageSize);

    /**
     * 统计数据条数,按条件
     * @param wrapper
     * @return
     */
    int count(QueryWrapper<T> wrapper);

    /**
     * 获取所有数据条数
     * @return
     */
    int count();

    /**
     * 创建记录事件
     * @param t
     */
    default void onCreate(T t){}

    /**
     * 更新记录事件
     * @param t
     */
    default void onUpdate(T t){}

    /**
     * 数据库产生变化，增删改都会触发
     */
    default void onChange(){}

    /**
     * 删除记录事件
     * @param wrapper
     */
    default void onDelete(List<T> wrapper){}

}
